--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 447a8a920c1f5ea8415a6294f1efd8d4ab98e8a6
Parents : 0ba3ea9
Author : Mark Qvist <mark@unsigned.io>
Date : 2023-02-17T17:10:31+01:00
Implemented mechanisms to tend propagation node sync graph towards using faster links first
Changes
2 files changed, 26 insertions(+), 3 deletions(-)
Diff
diff --git a/LXMF/LXMRouter.py b/LXMF/LXMRouter.py
index 901c933..4b0e64b 100644
--- a/LXMF/LXMRouter.py
+++ b/LXMF/LXMRouter.py
@@ -28,6 +28,7 @@ class LXMRouter:
AUTOPEER = True
AUTOPEER_MAXDEPTH = 4
+ FASTEST_N_RANDOM_POOL = 2
PR_PATH_TIMEOUT = 10
@@ -917,6 +918,7 @@ class LXMRouter:
peer.peering_timebase = timestamp
peer.last_heard = time.time()
+
else:
peer = LXMPeer(self, destination_hash)
peer.alive = True
@@ -956,8 +958,29 @@ class LXMRouter:
peer_pool = []
if len(waiting_peers) > 0:
- RNS.log("Randomly selecting peer to sync from "+str(len(waiting_peers))+" waiting peers.", RNS.LOG_DEBUG)
- peer_pool = waiting_peers
+ fastest_peers = sorted(
+ waiting_peers,
+ key=lambda p: p.link_establishment_rate,
+ reverse=True
+ )[0:min(FASTEST_N_RANDOM_POOL, len(waiting_peers))]
+ peer_pool.extend(fastest_peers)
+
+ unknown_speed_peers = [p for p in waiting_peers if p.link_establishment_rate == 0]
+ if len(unknown_speed_peers) > 0:
+ peer_pool.extend(
+ unknown_speed_peers[
+ 0:min(
+ len(unknown_speed_peers),
+ len(fastest_peers)
+ )]
+ )
+
+ # TODO: Remove
+ for p in peer_pool:
+ RNS.log("Peer: "+RNS.prettyhexrep(p.destination.hash)+" "+RNS.prettysize(p.link_establishment_rate/8, "b")+"ps", RNS.LOG_DEBUG)
+
+ RNS.log("Selecting peer to sync from "+str(len(waiting_peers))+" waiting peers.", RNS.LOG_DEBUG)
+
elif len(unresponsive_peers) > 0:
RNS.log("No active peers available, randomly selecting peer to sync from "+str(len(unresponsive_peers))+" unresponsive peers.", RNS.LOG_DEBUG)
peer_pool = unresponsive_peers
diff --git a/LXMF/_version.py b/LXMF/_version.py
index 493f741..260c070 100644
--- a/LXMF/_version.py
+++ b/LXMF/_version.py
@@ -1 +1 @@
-__version__ = "0.3.0"
+__version__ = "0.3.1"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────